/**   
* @Title: NettyServer.java
* @Package com.an.itstatck
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com   
* @date 2017年8月2日 下午2:37:03
* @version V1.0   
*/


package com.an.itstatck;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
* @ClassName: NettyServer
* @Description: TODO(这里用一句话描述这个类的作用)
* @author antch,861710865@qq.com
* @date 2017年8月2日 下午2:37:03
* 
*/

public class NettyServer {

	public void start(int port) {
		EventLoopGroup boss = new NioEventLoopGroup();
		EventLoopGroup work = new NioEventLoopGroup();

		ServerBootstrap bootstrap = new ServerBootstrap();
		bootstrap.group(boss, work);
		bootstrap.channel(NioServerSocketChannel.class);
		bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
		bootstrap.childHandler(new ChildChannelHandler());
		
		//绑定端口
		try {
			ChannelFuture f = bootstrap.bind(port).sync();
			// 等待服务端监听端口关闭
			f.channel().closeFuture().sync();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//优雅的退出
			boss.shutdownGracefully();
			work.shutdownGracefully();
		}
		
	}
	/** 
	* @Title: main 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param args    设定文件 
	* @return void    返回类型 
	* @throws 
	*/

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		new NettyServer().start(8080);
	}

}
